home *** CD-ROM | disk | FTP | other *** search
- package com.ibm.xml.internal;
-
- import com.ibm.xml.framework.ChunkyCharArray;
- import com.ibm.xml.framework.StringPool;
- import com.ibm.xml.framework.StringProducer;
-
- class UTF8Reader$UTF8DataChunk implements StringProducer {
- // $FF: synthetic field
- private final UTF8Reader this$0;
- protected StringPool fStringPool;
- protected int fChunk;
- protected byte[] fData;
- protected UTF8Reader$UTF8DataChunk fPreviousChunk;
- protected UTF8Reader$UTF8DataChunk fNextChunk;
-
- protected UTF8Reader$UTF8DataChunk(UTF8Reader var1, StringPool var2, UTF8Reader$UTF8DataChunk var3) throws Exception {
- this.this$0 = var1;
- this.this$0 = var1;
- this.fStringPool = var2;
- this.fChunk = var3 == null ? 0 : var3.fChunk + 1;
- this.fPreviousChunk = var3;
- if (var3 != null) {
- var3.fNextChunk = this;
- }
-
- }
-
- protected UTF8Reader$UTF8DataChunk(UTF8Reader var1, UTF8Reader$UTF8DataChunk var2) {
- this.this$0 = var1;
- this.this$0 = var1;
- this.fStringPool = var2.fStringPool;
- this.fChunk = var2.fChunk;
- this.fData = var2.fData;
- this.fPreviousChunk = null;
- this.fNextChunk = null;
- }
-
- public UTF8Reader$UTF8DataChunk chunkFor(int var1) {
- int var2 = var1 >> 14;
-
- UTF8Reader$UTF8DataChunk var3;
- for(var3 = this; var2 != var3.fChunk; var3 = var3.fPreviousChunk) {
- }
-
- return var3;
- }
-
- public byte[] toByteArray() {
- return this.fData;
- }
-
- public void setByteArray(byte[] var1) {
- this.fData = var1;
- }
-
- public UTF8Reader$UTF8DataChunk nextChunk() {
- return this.fNextChunk;
- }
-
- public void clearPreviousChunk() {
- if (this.fPreviousChunk != null) {
- this.fPreviousChunk.fNextChunk = null;
- this.fPreviousChunk = null;
- }
-
- }
-
- public String toString(int var1, int var2) {
- StringBuffer var3 = new StringBuffer(var2);
- UTF8Reader$UTF8DataChunk var4 = this;
- int var5 = var1 + var2;
- int var6 = var1 & 16383;
- byte[] var7 = this.fData;
-
- while(var1 < var5) {
- int var8 = var7[var6++] & 255;
- ++var1;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((var8 & 128) == 0) {
- var3.append((char)var8);
- } else {
- int var9 = var7[var6++] & 255;
- ++var1;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((224 & var8) == 192) {
- int var10 = ((31 & var8) << 6) + (63 & var9);
- var3.append((char)var10);
- } else {
- int var13 = var7[var6++] & 255;
- ++var1;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((240 & var8) == 224) {
- int var11 = ((15 & var8) << 12) + ((63 & var9) << 6) + (63 & var13);
- var3.append((char)var11);
- } else {
- int var14 = var7[var6++] & 255;
- ++var1;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- int var12 = ((15 & var8) << 18) + ((63 & var9) << 12) + ((63 & var13) << 6) + (63 & var14);
- if (var12 < 65536) {
- var3.append((char)var12);
- } else {
- var3.append((char)((var12 - 65536 >> 10) + '\ud800'));
- var3.append((char)((var12 - 65536 & 1023) + '\udc00'));
- }
- }
- }
- }
- }
-
- return var3.toString();
- }
-
- public boolean equalsString(int var1, int var2, String var3, int var4) {
- UTF8Reader$UTF8DataChunk var5 = this;
- int var6 = var1 + var2;
- int var7 = var1 & 16383;
- byte[] var8 = this.fData;
- int var9 = 0;
-
- while(var1 < var6) {
- if (var9 == var4) {
- return false;
- }
-
- int var10 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var5 = var5.fNextChunk;
- var8 = var5.fData;
- var7 = 0;
- }
-
- if ((var10 & 128) == 0) {
- if (var10 != var3.charAt(var9++)) {
- return false;
- }
- } else {
- int var11 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var5 = var5.fNextChunk;
- var8 = var5.fData;
- var7 = 0;
- }
-
- if ((224 & var10) == 192) {
- int var12 = ((31 & var10) << 6) + (63 & var11);
- if (var12 != var3.charAt(var9++)) {
- return false;
- }
- } else {
- int var16 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var5 = var5.fNextChunk;
- var8 = var5.fData;
- var7 = 0;
- }
-
- if ((240 & var10) == 224) {
- int var13 = ((15 & var10) << 12) + ((63 & var11) << 6) + (63 & var16);
- if (var13 != var3.charAt(var9++)) {
- return false;
- }
- } else {
- int var17 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var5 = var5.fNextChunk;
- var8 = var5.fData;
- var7 = 0;
- }
-
- int var14 = ((15 & var10) << 18) + ((63 & var11) << 12) + ((63 & var16) << 6) + (63 & var17);
- if (var14 < 65536) {
- if (var14 != var3.charAt(var9++)) {
- return false;
- }
- } else {
- if ((var14 - 65536 >> 10) + '\ud800' != var3.charAt(var9++)) {
- return false;
- }
-
- if (var9 == var4) {
- return false;
- }
-
- if ((var14 - 65536 & 1023) + '\udc00' != var3.charAt(var9++)) {
- return false;
- }
- }
- }
- }
- }
- }
-
- if (var9 != var4) {
- return false;
- } else {
- return true;
- }
- }
-
- protected UTF8Reader$UTF8DataChunk createClump(int var1) {
- UTF8Reader$UTF8DataChunk var2 = new UTF8Reader$UTF8DataChunk(this.this$0, this);
- UTF8Reader$UTF8DataChunk var3 = this.fNextChunk;
- UTF8Reader$UTF8DataChunk var4 = var2;
-
- UTF8Reader$UTF8DataChunk var5;
- do {
- var5 = new UTF8Reader$UTF8DataChunk(this.this$0, var3);
- var4.fNextChunk = var5;
- var3 = var3.fNextChunk;
- var4 = var5;
- } while(var5.fChunk != var1);
-
- return var2;
- }
-
- public int addString(int var1, int var2) {
- int var3 = var1 >> 14;
- if (var3 != this.fChunk) {
- if (this.fPreviousChunk != null) {
- return this.fPreviousChunk.addString(var1, var2);
- } else {
- try {
- this.this$0.fErrorHandler.error(168);
- } catch (Exception var5) {
- }
-
- return -1;
- }
- } else {
- int var4 = var1 + var2 - 1 >> 14;
- return var3 == var4 ? this.fStringPool.addString(this, var1 & 16383, var2) : this.fStringPool.addString(this.createClump(var4), var1 & 16383, var2);
- }
- }
-
- public int addSymbol(int var1, int var2, int var3) {
- int var4 = var1 >> 14;
- if (var4 != this.fChunk) {
- if (this.fPreviousChunk != null) {
- return this.fPreviousChunk.addSymbol(var1, var2, var3);
- } else {
- try {
- this.this$0.fErrorHandler.error(168);
- } catch (Exception var6) {
- }
-
- return -1;
- }
- } else {
- int var5 = var1 + var2 - 1 >> 14;
- if (var4 == var5) {
- if (var3 == 0) {
- var3 = this.getHashcode(var1, var2);
- }
-
- return this.fStringPool.addSymbol(this, var1 & 16383, var2, var3);
- } else {
- if (var3 == 0) {
- var3 = this.getHashcode(var1, var2);
- }
-
- return this.fStringPool.addSymbol(this.createClump(var5), var1 & 16383, var2, var3);
- }
- }
- }
-
- public void append(ChunkyCharArray var1, int var2, int var3) {
- UTF8Reader$UTF8DataChunk var4 = this.chunkFor(var2);
- int var5 = var2 + var3;
- int var6 = var2 & 16383;
- byte[] var7 = this.fData;
-
- while(var2 < var5) {
- int var8 = var7[var6++] & 255;
- ++var2;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((var8 & 128) == 0) {
- var1.append((char)var8);
- } else {
- int var9 = var7[var6++] & 255;
- ++var2;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((224 & var8) == 192) {
- int var10 = ((31 & var8) << 6) + (63 & var9);
- var1.append((char)var10);
- } else {
- int var13 = var7[var6++] & 255;
- ++var2;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- if ((240 & var8) == 224) {
- int var11 = ((15 & var8) << 12) + ((63 & var9) << 6) + (63 & var13);
- var1.append((char)var11);
- } else {
- int var14 = var7[var6++] & 255;
- ++var2;
- if (var6 == 16384) {
- var4 = var4.fNextChunk;
- var7 = var4.fData;
- var6 = 0;
- }
-
- int var12 = ((15 & var8) << 18) + ((63 & var9) << 12) + ((63 & var13) << 6) + (63 & var14);
- if (var12 < 65536) {
- var1.append((char)var12);
- } else {
- var1.append((char)((var12 - 65536 >> 10) + '\ud800'));
- var1.append((char)((var12 - 65536 & 1023) + '\udc00'));
- }
- }
- }
- }
- }
-
- }
-
- protected int getHashcode(int var1, int var2) {
- UTF8Reader$UTF8DataChunk var3 = this.chunkFor(var1);
- int var4 = var1 + var2;
- int var5 = 0;
- int var6 = 0;
- int var7 = var1 & 16383;
- byte[] var8 = var3.fData;
-
- while(var1 < var4) {
- int var9 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var3 = var3.fNextChunk;
- var8 = var3.fData;
- var7 = 0;
- }
-
- if ((var9 & 128) == 0) {
- var5 = StringHasher.hashChar(var5, var6++, var9);
- } else {
- int var10 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var3 = var3.fNextChunk;
- var8 = var3.fData;
- var7 = 0;
- }
-
- if ((224 & var9) == 192) {
- int var11 = ((31 & var9) << 6) + (63 & var10);
- var5 = StringHasher.hashChar(var5, var6++, var11);
- } else {
- int var16 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var3 = var3.fNextChunk;
- var8 = var3.fData;
- var7 = 0;
- }
-
- if ((240 & var9) == 224) {
- int var12 = ((15 & var9) << 12) + ((63 & var10) << 6) + (63 & var16);
- var5 = StringHasher.hashChar(var5, var6++, var12);
- } else {
- int var17 = var8[var7++] & 255;
- ++var1;
- if (var7 == 16384) {
- var3 = var3.fNextChunk;
- var8 = var3.fData;
- var7 = 0;
- }
-
- int var13 = ((15 & var9) << 18) + ((63 & var10) << 12) + ((63 & var16) << 6) + (63 & var17);
- if (var13 < 65536) {
- var5 = StringHasher.hashChar(var5, var6++, var13);
- } else {
- var5 = StringHasher.hashChar(var5, var6++, (var13 - 65536 >> 10) + '\ud800');
- var5 = StringHasher.hashChar(var5, var6++, (var13 - 65536 & 1023) + '\udc00');
- }
- }
- }
- }
- }
-
- return StringHasher.finishHash(var5);
- }
- }
-